package controllers

import (
	"github.com/gin-gonic/gin"
	"go-api-template/common"
	"go-api-template/entity"
	"go-api-template/service"
	"log"
)

type UserController struct {
	userService service.UserService
}

func NewUserController() *UserController {
	return &UserController{userService: &service.UserServiceImpl{}}
}

func (c *UserController) Create(context *gin.Context, u *entity.UserReq) {
	if err := c.userService.Create(u); err != nil {
		common.BadRequest(context, err.Error())
	} else {
		common.Success(context, "")
	}
}

func (c *UserController) Update(context *gin.Context, id int64, u *entity.UserReq) {
	log.Printf("req: %+v, %T", u, u)
	if err := c.userService.Update(id, u); err != nil {
		common.BadRequest(context, err.Error())
		return
	}

	common.Success(context, "")
}

func (c *UserController) Delete(context *gin.Context, id int64) {
	if err := c.userService.Delete(id); err != nil {
		common.BadRequest(context, err.Error())
		return
	}

	common.Success(context, "")
}

func (c *UserController) Find(context *gin.Context, id int64) {
	if u, err := c.userService.Find(id); err != nil {
		common.BadRequest(context, err.Error())
	} else {
		common.Success(context, u)
	}
}

func (c *UserController) QueryPage(context *gin.Context, f *entity.UserFilter) {
	if r, err := c.userService.QueryPage(f); err != nil {
		common.BadRequest(context, err.Error())
	} else {
		common.Success(context, r)
	}
}
